import router from '@/router'
import nprogress from 'nprogress'
import 'nprogress/nprogress.css'
import store from '@/store'
import {asyncRoutes} from '@/router'
/** 
  *前置守卫
  *
 */
const whiteList=['/login','/404']
router.beforeEach(async (to,from,next)=>{
  nprogress.start()
  if(store.getters.token) {
    //存在token
    if(to.path === '/login') {
      //跳转到主页
      next('/') //中转到主页
      // next (地址) 并没有执行后置守卫
      nprogress.done()
    }else{
      //判断是否获取过资料
      if(!store.getters.userId) {
        const {roles} = await store.dispatch('user/getUserInfo')
        // console.log(roles.menus);  //数组 不确定 可能是8个 1个 0个
        // console.log(asyncRoutes);  //数组 8个
        const filterRoutes = asyncRoutes.filter(item=>{
          //return true/false
          // return roles.menus.includes(item.name)   //这是原代码 因为item.name 和 item.path 雷同会导致浏览器警告所以用slice方法提取字符串片段
          return roles.menus.includes(item.path.slice(1))  //这是新代码 自己写的代码 
          //筛选后的路由
          
        })
        store.commit('user/setRoutes',filterRoutes)
        router.addRoutes([...filterRoutes,{ path: '*', redirect: '/404', hidden: true }])  //添加动态路由信息到路由表
        // router添加动态路由之后 需要转发一下
        next(to.path)  //目的是让路由拥有信息  router的已知缺陷
      }else {
        next()
      }
      
    }
  }else {
    //没有token
    if(whiteList.includes(to.path)) {
      next()
    }else {
      next('/login') //中转到登录页
      nprogress.done()
    }
  }
})

 /** 
  *后置守卫
  *
 */
  router.afterEach(()=>{
    nprogress.done()
  })